UP | HOME

self-host mail

目录

DNS record

SPF

全名 Sender Policy Framework,用来鉴别发送邮件的服务器或者 IP,是否为该域允许的范围。 这需要在发送邮件的域名下添加一条 TXT 记录,举个例子: example.net. TXT "v=spf1 mx a:pluto.example.net include:aspmx.googlemail.com -all" v=spf1 做开头为必须,spf1 说明这是第一版 spf 协议 SPF 规定有 6 种机制:

  • ALL 匹配所有的结果,一般放在最后
  • A 匹配所有该域的 A 记录
  • MX 匹配所有该域的 MX 记录
  • IP4 所有之后的 IPv4 地址,可以用 mask 匹配多项,比如:192.168.0.0/24
  • IP6 所有之后的 IPv6 地址,同 IPv4
  • INCLUDE 去之后对应地址查找,比如 INCLUDE:spf.34nm.com,就是去 spf.34nm.com 继续查找 TXT/SPF 记录

还有四种修饰符分别意义是:

  • “+“:允许,默认记录都是允许
  • “-“:不允许
  • “~“:中立,也就是没有相关策略
  • “?“:同样是中立,但是为 debug

这样例子中 example.net. TXT "v=spf1 mx a:pluto.example.net include:aspmx.googlemail.com -all" 的意思是

mx 允许所有 MX 记录
a:pluto.example.net pluto.example.net 的 A 记录也允许
include:aspmx.googlemail.com 其余记录参考 aspmx.googlemail.com
-all 拒绝所有其他记录

DKIM

由于 SPF 天生只验证是否可以发信, 不保证这个发信人是验证的,因此,SPF 验证通过的仍然可能是伪造的邮件. 这就需要 DKIM 来进一步保证这封邮件不是伪造的. 在特殊的子域名”\_domainkey”(例如:\_domainkey.example.com)的 TXT 记录中插入一对 RSA 密钥中的公钥, 而 RSA 的私钥用来加密邮件的部分字段. 收到邮件的服务器发现有 DKIM-SIGNATURE 字段时,会自动校验 DKIM 的公钥, 按照匹配程度进行处理. 这样就完成了验证.

    +---------------+           +-----------------+
    | SenderServer  |           | ReceiverServer  |
    +---------------+           +-----------------+
            | -----------------\         |
            |-| Calculate DKIM |         |
            | |----------------|         |
            |                            |
            | Send singed mail           |
            |--------------------------->|
            |                            |
            |          Check DKIM record |
            |< --------------------------|
            |                            | ---------------------------\
            |                            |-| OK, found key and verify |
            |                            | |--------------------------|
            |                            |

还可以在特殊子域名之上,再建立一堆域名,例如 authmail.\_domainkey.example.com,这样在校验邮件时还可以选择不同的密钥. 协议的内容相对来说就简单很多了,只有三种值:

  • v=DKIM1; 使用 DKIM 第一版协议
  • k=rsa; 使用 RSA 加密
  • p=长长的一段公钥

DMARC

该验证的都验证了,还有个 DMARC 是干吗的呢? 这是为了给域名邮件的拥有者报告垃圾邮件的状况而设定的规则. 和之前的方法一样,在\_dmarc.example.com 下面设定自己的 DMARC 规则, 具体就参考 Google 提供的文档吧.

https://support.google.com/a/answer/2466580?hl=zh-Hans&ref%5C_topic=2759254

self-host service

Links

作者: Petrus.Z

Created: 2021-06-23 Wed 18:33